package com.tedu.api.ee;

import javafx.beans.binding.NumberBinding;
import org.junit.Test;

/**
 * Java有一套完善异常处理操作
 * 程序中对应出现什么问题,就会有对应异常【对象】提供出来,错误也是对象
 *
 * Throwable顶级超类--抛出错误:
 * 子类:Exception对象:程序级别的错误(经常遇见)
 * 编译期--FileOutputStream(编译代码同时,下方波浪线)
 * 1.处理方式:抛出异常:不管什么错误,抛出方法外
 * 2.捕获异常
 * 检查异常:通常用编译器检查出来,存在异常类,抛出,捕获
 *
 * 运行期---控制台(IDE开发工具控制台,显示出红色)
 * 非检查异常:RuntimeException(认为所有异常都来自RuntimeException)
 * 所有异常都是RuntimeException的子类
 * 子类:Error对象:描述系统级别错误(不常见)
 * 测试:程序挂了?字符串
 * String str="字符串";
 */
public class EE {
    /**
     * Error错误---递归方式栈溢出
     * 1.创建静态方法
     * 2.在静态方法中调用method
     * 3.通过testError单元测试--调用EE对象下的method方法
     */
    public static void method(){//静态方法
        method();
    }
    @Test
    public void testError(){
        //EE.method();

    }
     //Exception 检查异常--处理手段2 捕获方式 预判程序出的异常

    /**
     * 捕捉异常语法
     * try{
     *     可能出现异常代码段添加
     * }catch(异常名字【小异常】 e){
     *     e.printStackTrace();打印异常信息
     *                          方便查询原因
     * }catch(异常名字【中异常】 e){
     *     e.printStackTrace();
     * }catch(异常名字【大异常】 e){
     *     e.printStackTrace();
     * }finally{
     *     捕获捕捉异常--必须执行代码块--IO关闭流
     * }
     * 捕捉异常快捷键  ctrl+alt+t  选中
     */

    @Test
    public void testException() {
        try {
            String s = "a";
            //StringIndexOutOfBoundsException异常--产生原因:下标越界异常

            s.charAt(0);
            //NullPointerException异常---空指针异常 字符串为空

            s.length();
            //NUmberFormatException异常---数值转换异常
            //异常产生原因将存储的不是整数类型的字符串，转换为整数

            Integer.parseInt(s);
        } catch (NumberFormatException e) {//数值转换异常
            e.printStackTrace();//打印异常信息  提供线索
        } catch (NullPointerException e) {//空指针异常
            e.printStackTrace();//打印异常信息  提供线索
        } catch (StringIndexOutOfBoundsException e) {//下标越界异常
            e.printStackTrace();//打印异常信息  提供线索
        } finally {
            System.out.println("执执执执执行");
        }
        }
    }
    //找五个错误,用try--catch逮出来
    //字符串  集合中  标准IO